Как я разрабатывал боевую систему для хардкор RPG и чуть не сошёл с ума от одной формулы
Привет. Меня зовут Виталий, я инди-разработчик и делаю хардкор фэнтези RPG на кроссплатформ. Сегодня расскажу как я провёл несколько дней в мозговом штурме пытаясь найти идеальную формулу поглощения урона. Спойлер: формула оказалась той ещё засранкой.
С чего всё началось
Я делаю игру в духе хардкор RPG — с настоящей глубокой боевой системой, нестандартной для смартфонов, пошаговыми боями, множеством героев, детальным крафтом снаряжения и боссами которых нужно продумывать а не просто закликивать. Движок Unity, сервер собственный, язык C#.
Когда дошло до боевого ядра — я понял что мне нужно сесть и выстроить всю механику на бумаге прежде чем писать код. Иначе потом переписывать всё с нуля.
Первые пять минут всё было хорошо
Я сопоставил все базовые вещи. 12 раундов на бой. 6 героев на поле плюс 4 в резерве. Передний и задний ряд. Враги сверху, герои снизу — вертикальный экран. Пошаговый бой, полный автомат, герои сами выбирают цели.
Потом начался цирк.
В игре 5 классов: Воин, Страж, Рейнджер, Маг, Жрец. У каждого свои базовые статы. 12 характеристик. Система звёздности, рангов, уровней, снаряжения. Гравировки. Бафы. Дебафы. Провокация. Воскрешение. итд.
Казалось бы, а чем плоха формула из Доты 2?
Поглощение = (0.052 × Броня) / (0.9 + 0.048 × Броня)
Красиво. Проверено годами. Работает в одной из самых сбалансированных игр в мире.
Но нет. У меня не работает.
Почему?
Потому что в Доте броня это маленькие числа — 5, 10, 20 единиц. У меня герои качаются до 80 уровня, имеют 6 рангов рамки, 20 звёзд, и топовое снаряжение даёт до 480% к защите. Цифры улетают в десятки тысяч. Формула Доты при таких числах либо даёт 0.1% поглощения либо 99.9% — никакой середины.
Ладно, сказал я. Придумаем свою.
Следующие несколько часов я подбирал константу
Я ушел от базовой казуальной формулы которая работает по типу АТК = (АТК / (АТК + ЗАЩ) - это вообще "забейте" она будет хорошо смотреться в кликерах но не в хардкор рпг. Затем я сменил тактику, работать от защиты а не атаки(так делают многие топ ММО) и перевести бонус к защите от снаряжение не + процент от базы, а пойти в плоскую величину(это тоже фишка топ ММО но есть свои косяки)
Новая формула выглядела просто:
Поглощение = Защита / (Защита + Константа)
Константа — это число которое определяет при какой защите поглощается ровно 50% урона. Всё логично.
Одна проблема — какое число?
Я перебрал: 300, 500, 1000, 3000, 6000, 7000, 12000, 20000.
При маленькой константе — новичок в серой рамке поглощает 80% урона и игра превращается в детский сад.
При большой константе — прокачанный танк в мифическом снаряжении поглощает 3% и жрец который бафает его броню на 50% выглядит как шарлатан потому что разница между 3% и 4.5% это издевательство а не механика.
В какой-то момент Жрец со своими +50% к броне как будто даёт танку святую воду вместо защиты. :D
Тогда я попробовал гибрид
Плоские цифры плюс проценты. Казалось элегантно — плоское даёт базовую защиту всем, процент усиливает тех у кого высокая база.
Считаем этап 3 — синий шмот, 40 уровень:
Воин: 37% поглощения. Норма!
Но потом смотрю на другие вариации и вижу что Воин, Страж, Маг и Рейнджер на каждом этапе поглощают примерно одинаково. Разница между самым толстым танком и хрупким магом — 5%. Это не хардкор RPG, это мусор.
Плоская часть шмота одинакова для всех классов и просто давит разницу между ними.
Семь лет в ArcheAge спасли проект
Я играл в ArcheAge семь лет почти до закрытия игры в мире(в РФ она все еще функционирует но вроде как отрезана от Кореи). И пока я кружил по одним и тем же граблям — на след. утро я пошёл на работу, погуглил скриншоты шмота из ArcheAge и вспомнил как там всё устроено.
Вернулся и думаю, давай возьмём их подход, ведь не зря это бестселлер 2014.
В ArcheAge шмот всегда давал два стата сразу — физическую защиту и магическое сопротивление. Тип брони определял пропорцию: тяжёлый давал много брони и мало сопры, лёгкий наоборот. И всё это были плоские числа — никаких процентов.
И главное — константу нужно подбирать не с потолка а под конкретную точку баланса. Голый прокачанный Воин на максимальном уровне и ранге без шмота должен поглощать ровно 50% урона. Это точка отсчёта. Под неё считаем базовую защиту Воина, и константа определяется сама.
Воин максимальная прокачка = 5000 единиц защиты
Константа = 5000
Поглощение = 5000 / (5000 + 5000) = 50% - норма
Элегантно. Просто. Работает.
голый | Мид. гейм | Лейт гейм
Воин 10% 32% 77%
Страж 11% 36% 81%
Маг 8% 24% 64%
Рейнджер 9% 26% 68%
Разница между Стражем и Магом на лейте — 19%. Страж реально толще. Маг реально хрупкий. Жрец который бафает танка наконец перестал быть шарлатаном.
Что ещё зафиксировал
Пока искал формулу — попутно выстроил всю систему:
Типы навыков — Вступление, Активная, Пассивная, Фатальная, Реакция. Все с шансом срабатывания.
Система прогрессии — уровень до 80, 6 рангов рамки, 20 звёзд четырёх типов (медь, серебро, золото, алмаз), тир героя от обычного до босса ( этого можно укротить и получить себе)
Механика рядов — автоатака всегда бьёт первый ряд, навыки с шансом 30/70. Провокация перехватывает все атаки на носителя с абсолютным приоритетом.
Крафт снаряжения — три типа брони с разными пропорциями защиты и сопротивления, шесть тиров редкости, гравировки, сет-бонусы за полный комплект.
Штрафы за неподходящую броню — Маг в тяжёлом шмоте теряет 5% маг атаки и HP за каждый предмет. Надеть можно всё что угодно, но цена есть. Это песочница.
Боевое ядро ещё не дописано — осталась механика блока, парирования, уклонения, воскрешения и визуальные эффекты. Потом верстка боевого экрана.
Если интересно — напишу продолжение когда дойду до кода.
А пока главный урок: если делаешь глубокую игру а не казуалку — не берите первую попавшуюся формулу из популярной игры. Контекст имеет значение. Дота это не мобильный хардкор RPG, и формула которая работает там будет выдавать мусор у вас.
Иногда решение приходит от задротства в ArcheAge. :D
Разрабатываю в одиночку. Вертикальный срез в процессе. Если есть вопросы по механикам — спрашивайте в комментариях.
Рынок акций в критическом состоянии! Закончится ли обвал?
На этой неделе рынок акций вновь усилил падение, которое продолжается уже несколько месяцев. В результате чего индекс ММВБ упал к главной поддержке, уровню 2500 пунктов, и даже немного пробил его до 2480, после чего отскочил к 2535 и перешел в боковик на несколько дней. Давайте посмотрим, остался ли у рынка акций еще какой-то шанс перейти к полноценному отскоку.
Очередная неделя на рынке акций закрылась красной свечой. Теперь рынок падает уже 14 недель подряд! Это уже точно издевательство. Рынок продолжают давить несмотря ни на что. А впереди у нас важные события: экспирация фьючерсов в четверг и заседание ЦБ по ставке в пятницу.
Похоже, что именно к этим событиям и идет давка акций. И зачастую рынок разворачивается как раз на этих событиях. Так было, например, в сентябре и декабре 2024 года. Именно на неделе с экспирацией и заседанием ЦБ рынок резко разворачивался вверх и надолго. Правда, в тех случаях не было такого беспрецедентного по длительности давления вниз, как сейчас. Но это лишь еще один повод, чтобы развернуться рынку вверх.
Однако необязательно, что минимум будет поставлен именно в эти дни, как раз это обычно происходит за 1-2 недели до событий, и индекс успевает отскочить примерно на 100 пунктов перед глобальным разворотом. То есть в нашем случае неплохо было бы увидеть отскок хотя бы к уровню 2600, после чего откат и уже потом взлет в сторону области 2700-2800, разворот в сторону которой ожидаю последние недели.
Все мои глобальные цели падения (уровень 2600 и область 2500-2550), о возможном падении к которым при пробое уровня 2700 я предупреждал своих читателей еще в апреле, индекс уже сделал. И дальнейшее падение, на мой взгляд, маловероятно, лично у меня ниже 2500 толком и нет целей, к которым можно было бы упасть, чтобы потом от них развернуться вверх к 2700. Пробой и закрепление ниже 2500 технически может привести уже к падению в сторону минимумов 2022 года, поэтому очень надеюсь, что рынок хотя бы пока сможет удержаться выше уровня 2500 и нормально порасти к 2700-2800. Однако не исключаю, что потом падение возобновится и уже горадно глубже. Но сейчас картина такая, что индексу просто необходимо порасти хотя бы несколько недель. И такой шанс у индекса еще есть.
В прошлом обзоре я прогнозировал, что пробой уровня 2557 может привести к падению в область 2500-2520 — к глобальному аптренду и уровню 2500. Это мы и увидели. Цена упала даже немного ниже, после чего резко отскочила и перешла в боковик. По-хорошему, здесь стоило за пару дней развернуться вверх и уже пробиваться к уровню 2600, однако рынок остался возле 2500, что несколько тревожит.
Но шанс отскочить дальше еще есть, пока индекс остается выше уровня 2500. Ведь локальный нисходящий тренд пробить ему удалось. Теперь нужно только пробить последние вершины выше 2530 и закрепиться снова выше глобального аптренда, что приведет уже к ускорению роста к уровню 2557 и, скорее всего, с его пробоем уже выше, к 2600. После чего цена может откатиться, чтобы протестировать пробитые глобальные нисходящие тренды.
Кстати, ранее в телеграм-канале опубликовал пост с развернутой статистикой и результатами всех своих прогнозов в общедоступном канале за целый год. Результаты отличные! Например, доля успешных прогнозов по индексу составила 87%! Присоединяйтесь к каналу!
И вот это тестирование может совпасть с экспирацией и заседанием ЦБ на следующей неделе. Ну, по крайней мере, в идеале последовательность движений должна быть примерно такой. Однако не ясно, что именно может стать поводом для роста, ибо ждать позитивных действий и прогнозов от ЦБ особо оснований нет. Мы это еще обсудим подробнее на следующей неделе.
Надо понимать, что картина индекса может испортиться, если его все же продавят глубже в область 2400-2500. В этом случае на разворот рынка вверх в конце недели все равно можно будет рассчитывать, но это уже была бы совсем нетипичная схема разворота и менее вероятно, что его удастся реализовать, так как 2500 уже будет выступать сильным сопротивлением.
Стоит добавить, что многие крупные акции уже опустились на такое дно, что на них просто страшно смотреть. Графики там выглядят так, как будто эти бумаги уже никогда не вылезут из пропасти, в которую свалились за последние годы. Но хотя бы отскочить им все-таки нужно. Особенно нефтекомпаниям, которые сейчас при нефти под $100 стоят дешевле, чем когда они ее продавали за $40-50. Здесь какое-то явное противоречие, которое рынок не учитывает.
Например, акции Роснефти свалились к ₽360, где они не были даже в начале года (цена была ₽390), когда средняя цена продажи нефти была около $40 за баррель. То же самое можно сказать и про акции Лукойла, которые впервые за несколько лет надолго опустились заметно ниже уровня ₽5000. И все это на рекордно высоких ценах на нефть уже в течение нескольких месяцев.
То есть объективно это ненормально. Локально эти бумаги сильно недооценены и выглядят привлекательными для покупок. В отличие от тех цен, которые мы наблюдали последние годы, и где их активно почему-то откупали инвесторы. Явно спрос на Лукойл по ₽7000-8000 в феврале-марте 2025 года при куда более высокой ставке ЦБ и куда более низких ценах на нефть был многократно больше, чем сейчас по ₽4700, что лично я никак принять не могу. Для меня это всё аномалии, вызванные поведением толпы неразумных инвесторов, которые почему-то спешат покупать необоснованно дорого и продавать необоснованно дешево (судя по статистике ЦБ).
Наш рынок в последние годы стал настолько нелогичный, что объяснить его динамику практически невозможно с точки зрения фундаментального анализа. Разве что только с помощью технического, да и то не везде. И если смотреть на индекс, то динамика последних месяцев не выглядит технически аномальной на часовом графике. Но вот к дневному и недельному графику можно задать довольно много вопросов. Будем надеяться, что следующая неделя сможет закрыться зеленой свечой, а события конца недели смогут наконец-то развернуть рынок вверх.
Все так же могу сказать, что рынок акций фундаментально не выглядит привлекательным, однако спекулятивные покупки бумаг уместны, если ограничивать по ним риски. И, по-моему, покупки акций возле уровня 2500 по индексу пока еще выглядят уместно. Вот если индекс преодолеет 2500, вот тогда пытаться спекулятивно лонговать рынок станет рискованно. Но, надеюсь, пока этого удастся избежать, и в ближайшую неделю рынок развернется вверх. О любых изменениях обязательно сообщу на своём канале.
Для тех, кто хочет всегда быть в курсе ключевых рыночных трендов, у меня есть телеграм-канал, где я оперативно делюсь самыми важными прогнозами и новостями. Обязательно присоединяйтесь сейчас, чтобы не упустить ключевые финансовые возможности уже в ближайшем будущем!
В общем, остается надежда только на экспирацию и заседание ЦБ, что на фоне этих событий рынок наконец-то сможет развернуться вверх и порасти хотя бы несколько недель. Технически надо вернуться в область 2700-2800. И полагаю, что если действительно появится какой-то триггер к росту, то рынок начнет точно также упорно расти вверх, как и падал последние месяцы. И цена на нефть (даже если она совсем упадет) при этом не будет иметь никакого значения.
Спасибо, что дочитали. Всем удачи и профита!
Для людей которые возмущались что давно нет дрисни и антисанитарии в роликах про Индию
Несколько человек в комментариях к предыдущим видео возмущались "где дрисня?", "слишком чисто, я не верю, это не Индия", "даже тега Антисанитария нет". Запускаю линейку из 4-5 постов по просьбам худеющих людей которым надо проблеваться.
Чемпионат мира по футболу и политика
Какого хера??? Играют Германия с Кюрасао. Трансляции отменили везде. Даже в интернете не найти. Это что за бред? Спорт вне политики говорят они.
Nestandart2886 - ты просто чёрт!
Ты типа накидал вопросов и заблочил мне возможность ответить
Пусть типа все смотрят как я не ответил тебе!
Вот именно об этом я и писал в том числе - да ты просто гнилой чёрт, раз так по крысиному поступаешь!
@bomber162, погляди как это недоразумение себя ведет!
Ватный вопрос от ватника про скрепы
Какого, простите, органа когда я смотрю "Ранчо Даттонов" я хочу поехать в село и рожать детей, а глядя на скрепноносное российское кино я хочу его переключить? Что, блядь, происходит?


